import Vue from 'vue'

Date.prototype.Format = Date.prototype.Format || function(fmt) { // author: meizz
  fmt = fmt || 'yyyy-MM-dd hh:mm:ss'
  var o = {
    'M+': this.getMonth() + 1, // 月份
    'd+': this.getDate(), // 日
    'h+': this.getHours(), // 小时
    'H+': this.getHours(), // 小时
    'm+': this.getMinutes(), // 分
    's+': this.getSeconds(), // 秒
    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
    'S': this.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt
}

const myStorage = {
  app: $configs.app,
  guid: $configs.guid+'.',
  guidaac: $configs.guidaac+'.',
}

function formatKey(k) {
  if (k === 'token' || k === 'uuid'){
    return myStorage.guidaac + k
  }
    return myStorage.guid + k
}

myStorage.remove = function(k) {
  return new Promise((resolve, reject) => {
    localStorage.removeItem(formatKey(k))
    resolve();
  })
}

myStorage.put = function(k, jsd) {
  return new Promise((resolve, reject) => {
    k = formatKey(k)
    if (!jsd) {
      return localStorage.removeItem(k)
    }
    const obj = {
      val: jsd,
      timestamp: (new Date()).Format()
    }
    localStorage.setItem(k, JSON.stringify(obj))
    resolve();
  })
}

myStorage.set = myStorage.put

myStorage.get = function(k) {
  k = formatKey(k)
  var item = localStorage.getItem(k) || '{}'
  const obj = JSON.parse(item)
  return obj.val
}

// Vue.prototype.myStorage = myStorage

export default myStorage
